scan 您所在的位置:网站首页 flutter windows 桌面应用程序 读取ble蓝牙扫码枪数据 scan

scan

2024-06-24 03:19| 来源: 网络整理| 查看: 265

flutter:实现扫码枪获取数据源,禁止系统键盘弹窗(不会触发键盘唤起,不会触发中文乱码) #

实现扫码枪获取数据源,禁止系统键盘弹窗。依赖 EditableText 原理,实现 flutter 端扫码能力支持。 (不会触发键盘唤起,不会触发中文乱码)

引入 #

在pubspec.yaml文件中进行引用:

dependencies: scan_gun: ^2.0.0 使用方式: #

在 main 方法中初始化 TextInputBinding

void main() { TextInputBinding(); runApp(const MyApp()); }

提供 ScanMonitorWidget 作为父节点,嵌套使用:

ScanMonitorWidget({ Key? key, required ChildBuilder childBuilder, FocusNode? scanNode, FocusNode? textFiledNode, required void Function(String) onSubmit, })

参数说明:

childBuilder :

typedef ChildBuilder = Widget Function(BuildContext context),使用者自己UI作为子节点

scanNode:

非必传,如果传,可通过 scanNode 监听获取当前扫码可用状态,hasFocus 时为获取焦点

GlobalKey

非必传,如果传,可通过 'scanKey' 强制获取获取焦点,保证扫码可用,如下 scanKey.currentState?.requestKeyboard()

textFiledNode:

提供外部存在输入框键盘输入与扫码输入同时存在的场景。内部做了焦点切换能力,保证输入框焦点取消后,能马上切换成扫码枪的焦点

focusLooper:

非必传,传true可开启轮询保活扫码焦点,但需要保证当前页面堆栈只存在一个 ScanMonitorWidget

onSubmit:

接收扫码枪返回的结果

适用场景及Demo演示: # 1. 无输入框交互,获取扫码结果: @override Widget build(BuildContext context) { return ScanMonitorWidget( childBuilder: (context) { return body(); }, onSubmit: (String result) { print(result); //接收到扫码结果 }, ); } 2. 带输入框交互,获取扫码结果: FocusNode textFiledNode = FocusNode(); TextEditingController controller = TextEditingController(); Widget body() { return TextField( focusNode: textFiledNode, controller: controller, ); } @override Widget build(BuildContext context) { return ScanMonitorWidget( textFiledNode: textFiledNode, childBuilder: (context) { return body(); }, onSubmit: (String result) { print(result); //接收到扫码结果 }, ); } 详细使用方式可查看 example : #

技术点分析



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有